﻿using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Windows.Forms;

namespace Formation_Entreprise
{
    class objFormation
    {
        private string query;
        private string strcn;
        private OleDbConnection oleDbCn;
        private OleDbCommand oleDbCmd;
        private OleDbDataReader reader;

        public objFormation()
        {
            // Ouverture de la connection à la base de donnée
            strcn = ConnectionBD.ObtenirConnectionString();
            oleDbCn = new OleDbConnection(strcn);
            oleDbCn.Open();
        }

        public List<string> getInsert_NomFormateur()
        {
            // Sélection des Formateur actif
            query = "SELECT NomFormateur FROM Formateur WHERE Actif = -1";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formatteurs dans le champ
            List<string> list = new List<string>();
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
            }

            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }

        public List<string> getNomFormation()
        {
            // Sélections des formations
            query = "SELECT NomFormation FROM Formation";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formations dans le champ
            List<string> list = new List<string>();
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }

        public List<string> getNomCours()
        {
            // Sélection du numéro du formateur en guise du nom du formateur
            query = "SELECT TitreCours FROM Cours";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajout du numero de formateur dans le champs

            List<string> list = new List<string>();
            int i = 0;
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
                i++;
            }
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }

        public List<string> getEntreprise()
        {
            // Sélection de l'entreprise en guise de la formation
            query = "SELECT NomEntreprise FROM  Entreprise";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute le nom de l'entreprise concerné à la formation
            List<string> list = new List<string>();
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
            }
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }

        public List<string> getConseiller()
        {
            // Sélection de l'entreprise en guise de la formation
            query = "SELECT Nom FROM  Conseiller WHERE Actif = -1";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute le nom de l'entreprise concerné à la formation
            List<string> list = new List<string>();
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
            }
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }

        public List<string> getListCours(string _cboFormation)
        {
            // Sélection du numéro du formateur en guise du nom du formateur
            query = "SELECT Cours.TitreCours " +
                "FROM Cours, Formation, Formation_Cours " +
                "WHERE Formation.NoFormation = Formation_Cours.NoFormation " +
                "AND Cours.NoCours = Formation_Cours.NoCours AND Formation.NomFormation like '" + _cboFormation + "'";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajout du numero de formateur dans le champs

            List<string> list = new List<string>();
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
            }
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }

        public List<string> getEntrepriseFormation(string _cboEntreprise)
        {
            // Sélection de l'entreprise en guise de la formation
            query = "SELECT Formation.NomFormation, Entreprise.NomEntreprise " +
                    "FROM Formation, Entreprise, Entreprise_Formation " +
                    "WHERE Entreprise.NoEntreprise = Entreprise_Formation.NoEntreprise " +
                    "AND Formation.NoFormation = Entreprise_Formation.NoFormation " +
                    "AND Entreprise.NoEntreprise = " + getNoEntreprise(_cboEntreprise);
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute le nom de l'entreprise concerné à la formation
            List<string> list = new List<string>();
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
            }
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }

        public List<string> getModify_NomFormateur()
        {
            // Sélection des Formateur actif
            query = "SELECT NomFormateur FROM Formateur WHERE Actif = -1";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formatteurs dans le champ
            List<string> list = new List<string>();
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }

        public List<string> getListFormation(string _cboEntreprise)
        {
            query = "SELECT Formation.NomFormation " +
                    "FROM Formation, Entreprise, Entreprise_Formation " +
                    "WHERE Entreprise.NoEntreprise = Entreprise_Formation.NoEntreprise " +
                    "AND Formation.NoFormation = Entreprise_Formation.NoFormation " +
                    "AND Entreprise.NomEntreprise like '" + _cboEntreprise + "'";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajout du numero de formateur dans le champs
            List<string> list = new List<string>();
            while (reader.Read())
            {
                list.Add(reader.GetString(0));
            }
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();

            return list;
        }


        public object[] getSelectFormation(string _cboFormation)
        {
            string nom = getNomFormateur(_cboFormation);

            // Sélection du numéro du formateur en guise du nom du formateur
            query = "SELECT NbHeure, Langue, Description, Prix FROM Formation WHERE NomFormation like '" + _cboFormation + "'";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajout du numero de formateur dans le champs
            reader.Read();

            decimal dMnt = reader.GetDecimal(3);
            string sMnt = string.Format("{0:C}", dMnt);
            object[] listString = { reader.GetInt32(0).ToString(), reader.GetString(1), reader.GetString(2), sMnt, nom };
            reader.Close();
            oleDbCmd.Cancel();

            return listString;
        }


        public string getMontantFormation(string NomFormation)
        {
            // Sélection des Formateur actif
            query = "SELECT Prix FROM Formation WHERE NoFormation = " + getNoFormation(NomFormation);
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formatteurs dans le champ
            string montant = null;
            decimal getMontant = 0;
            while (reader.Read())
            {
                getMontant = reader.GetDecimal(0);
                montant = string.Format("{0:C}", getMontant);
            }

            reader.Close();
            oleDbCmd.Cancel();

            return montant;
        }

        public string getModify_NomFormateur(string NomFormation)
        {
            // Sélection des Formateur actif
            query = "SELECT NomFormateur FROM Formateur WHERE NoFormateur = " + getNoFormateur(NomFormation);
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formatteurs dans le champ
            string nomFormateur = null;
            while (reader.Read())
            {
                nomFormateur = reader.GetString(0);
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return nomFormateur;
        }

        public string getMontantTotal(string Entreprise)
        {
            // Sélection du montant à payer en guise de l'entreprise et de la formation

            query = "SELECT Sum(Formation.Prix) ";
            query += "FROM Formation, Entreprise, Entreprise_Formation ";
            query += "WHERE Formation.NoFormation = Entreprise_Formation.NoFormation ";
            query += "AND Entreprise_Formation.NoEntreprise = Entreprise.NoEntreprise ";
            query += "AND Entreprise.NomEntreprise LIKE '" + Entreprise + "'";

            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute le montant à payer en guise de la formation et de l'entreprise
            string Montant = null;
            decimal getMontant = 0;
            while (reader.Read())
            {
                if (!string.IsNullOrEmpty(reader.GetValue(0).ToString()))
                {
                    getMontant = reader.GetDecimal(0);
                }
                Montant = string.Format("{0:C}", getMontant);

            }
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();

            return Montant;
        }

        public string getNomConseiller(string Entreprise)
        {
            // Sélection des Formateur actif
            query = "SELECT Conseiller.Nom FROM Conseiller, Entreprise WHERE Entreprise.Conseiller = Conseiller.NoConseiller AND Actif = -1 AND NomEntreprise LIKE '" + Entreprise + "'";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formatteurs dans le champ
            string nom = null;
            while (reader.Read())
            {
                nom = reader.GetString(0);
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return nom;
        }

        private string getNomFormateur(string NomFormation)
        {
            string nom = string.Empty;

            query = "SELECT NomFormateur FROM Formateur, Formation WHERE Formation.NoFormateur = Formateur.NoFormateur AND" +
                " Formation.NomFormation like '" + NomFormation + "'";

            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formations dans le champ
            while (reader.Read())
            {
                nom = reader.GetString(0);
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return nom;
        }


        public bool getFactureFormation(string NomFormation, string NomEntreprise)
        {
            int numFormation = getNoFormation(NomFormation);
            int numEntreprise = getNoEntreprise(NomEntreprise);
            query = "SELECT NoFormation FROM Facture, Entreprise_Facture_Offre WHERE Entreprise_Facture_Offre.NoFacture = Facture.NoFacture" +
                "\nAND NoFormation = @num AND Entreprise_Facture_Offre.NoEntreprise = @ent";

            oleDbCmd = new OleDbCommand(query, oleDbCn);
            oleDbCmd.Parameters.AddWithValue("num", numFormation);
            oleDbCmd.Parameters.AddWithValue("ent", numEntreprise);

            reader = oleDbCmd.ExecuteReader();
            bool factureExist = false;
            while (reader.Read())
            {
                factureExist = true;
                break;
            }

            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return factureExist;
        }

        private bool getNomForamtion(string NomFormation)
        {
            query = "SELECT NomFormation FROM Formation WHERE NomFormation LIKE @nom";
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            oleDbCmd.Parameters.AddWithValue("nom", NomFormation);

            reader = oleDbCmd.ExecuteReader();

            if (reader.HasRows)
            {
                return true;
            }

            return false;
        }


        private int getNoFormateur(string NomFormateur)
        {
            // Sélection du numéro du formateur en guise du nom du formateur
            query = "SELECT NoFormateur" +
                " FROM Formateur WHERE NomFormateur like '" + NomFormateur + "'";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajout du numero de formateur dans le champs
            int noFormateur = 0;
            while (reader.Read())
            {
                noFormateur = reader.GetInt32(0);
            }
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();

            return noFormateur;
        }

        private int getNoFormation(string Nom)
        {
            int _numero = 0;
            query = "SELECT NoFormation FROM Formation WHERE NomFormation like '" + Nom + "'";

            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formations dans le champ
            while (reader.Read())
            {
                _numero = reader.GetInt32(0);
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return _numero;
        }

        private int getNoEntreprise(string NomEntreprise)
        {
            int _numero = 0;
            query = "SELECT NoEntreprise FROM Entreprise WHERE NomEntreprise like '" + NomEntreprise + "'";

            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formations dans le champ
            while (reader.Read())
            {
                _numero = reader.GetInt32(0);
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return _numero;
        }

        private int getNoCours(string NomCours)
        {
            int numero = 0;
            query = "SELECT NoCours FROM Cours WHERE TitreCours like '" + NomCours + "'";

            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formations dans le champ
            while (reader.Read())
            {
                numero = reader.GetInt32(0);
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return numero;
        }

        private int getNoFacture(string NomFormation)
        {
            int NoFormation = getNoFormation(NomFormation);
            int numero = 0;

            query = "SELECT NoFacture FROM Facture WHERE NoFormation = " + NoFormation;

            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Ajoute les formations dans le champ
            while (reader.Read())
            {
                numero = reader.GetInt32(0);
            }
            // Fermeture du reader et de la connection
            reader.Close();
            oleDbCmd.Cancel();

            return numero;
        }

        private int getNoConseiller(string NomConseiller)
        {
            query = "SELECT NoConseiller FROM Conseiller WHERE Nom LIKE @nom";

            oleDbCmd = new OleDbCommand(query, oleDbCn);
            oleDbCmd.Parameters.AddWithValue("nom", NomConseiller);
            reader = oleDbCmd.ExecuteReader();

            int num = 0;
            while (reader.Read())
            {
                num = reader.GetInt32(0);
            }
            return num;
        }


        public void setInsertFactureEntreprise(string Montant, string Date, string NomFormation)
        {
            // Insertion de la formation
            query = "INSERT INTO Facture(Montant, DateFacturation, NoFormation) VALUES( @montant, @date, @num)";

            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            oleDbCmd.Parameters.AddWithValue("montant", string.Format("{0:C},", Decimal.Parse(Montant).ToString()));
            oleDbCmd.Parameters.AddWithValue("date", Date);
            oleDbCmd.Parameters.AddWithValue("num", getNoFormation(NomFormation));

            reader = oleDbCmd.ExecuteReader();

            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }

        public void setInsertFormation(string formation, string heure, string langue, string description, string prix, string formateur)
        {
            if (getNomForamtion(formation))
            {
                MessageBox.Show("Cette formation existe déjà.", "Erreur d'ajout", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                int noFormateur = getNoFormateur(formateur);

                // Insertion de la formation
                query = "INSERT INTO Formation(NomFormation, NbHeure, Langue, Description, Prix, NoFormateur) " +
                    "VALUES(@formation, @heure, @langue, @description, @prix, @formateur)";

                // Création de la connection OleDB et l'execution du DataReader
                oleDbCmd = new OleDbCommand(query, oleDbCn);

                //Ajoute des valeurs aux paramètres
                oleDbCmd.Parameters.AddWithValue("formation", formation);
                oleDbCmd.Parameters.AddWithValue("heure", heure);
                oleDbCmd.Parameters.AddWithValue("langue", langue);
                oleDbCmd.Parameters.AddWithValue("description", description);
                oleDbCmd.Parameters.AddWithValue("prix", prix);
                oleDbCmd.Parameters.AddWithValue("formateur", noFormateur);

                reader = oleDbCmd.ExecuteReader();

                MessageBox.Show("Formation crée avec succès");

                // Fermeture du reader et de la connection OleDB
                reader.Close();
                oleDbCmd.Cancel();
            }
        }

        public void setInsertFormationCours(string Cours, string Formation)
        {
            int noFormation = getNoFormation(Formation);
            int noCours = getNoCours(Cours);

            // Sélection des Formateur actif
            query = "INSERT INTO Formation_Cours (NoFormation, NoCours) VALUES(";
            query += noFormation + ",";
            query += noCours + ")";
            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();
            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }

        public void setInsertEntrepriseFactureOffre(string Formation, string Entreprise)
        {
            int numFacture = getNoFacture(Formation);
            int numEnt = getNoEntreprise(Entreprise);
            // Sélection des Formateur actif
            query = "INSERT INTO Entreprise_Facture_Offre (NoFacture, NoEntreprise) VALUES(";
            query += numFacture + ",";
            query += numEnt + ")";

            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();

            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }

        public void setInsertEntrepriseFacture(string Entreprise, string Formation)
        {
            int noEntreprise = getNoEntreprise(Entreprise);
            int noFormation = getNoFormation(Formation);

            // Sélection des Formateur actif
            query = "INSERT INTO Entreprise_Formation (NoEntreprise, NoFormation) VALUES(";
            query += noEntreprise + ",";
            query += noFormation + ")";

            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();

            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }

        public void setInsertEntrepriseFormation(string Entreprise, string Formation)
        {
            int noEntreprise = getNoEntreprise(Entreprise);
            int noFormation = getNoFormation(Formation);

            // Sélection des Formateur actif
            query = "INSERT INTO Entreprise_Formation (NoEntreprise, NoFormation) VALUES(";
            query += noEntreprise + ",";
            query += noFormation + ")";

            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();

            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }

        public void setInsertFacture(string Montant, string NomFormation, string NomConseiller)
        {
            int num = getNoFormation(NomFormation);
            int conseiller = getNoConseiller(NomConseiller);

            // Sélection des Formateur actif
            query = "INSERT INTO Facture (Montant, NoFormation, DateFacturation, NoConseiller) VALUES(@p1, @p2, @p3, @p4)";


            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);

            //paramètres de la requete
            oleDbCmd.Parameters.AddWithValue("@p1", Montant);
            oleDbCmd.Parameters.AddWithValue("@p2", num);
            oleDbCmd.Parameters.AddWithValue("@p3", DateTime.Now.ToString("dd/MM/yyyy"));
            oleDbCmd.Parameters.AddWithValue("@p4", conseiller);

            reader = oleDbCmd.ExecuteReader();

            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }


        public void setDeleteFormationCours(string Cours, string Formation)
        {
            int noFormation = getNoFormation(Formation);
            int noCours = getNoCours(Cours);

            // Sélection du numéro du formateur en guise du nom du formateur
            query = "DELETE * FROM Formation_Cours WHERE NoFormation = " + noFormation +
                    " and NoCours = " + noCours;

            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();

            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }

        public void setDeleteEntrepriseFormation(string Formation, string Entreprise)
        {
            int noEnt = getNoEntreprise(Entreprise);
            int noFormation = getNoFormation(Formation);
            // Sélection du numéro du formateur en guise du nom du formateur
            query = "DELETE * FROM Entreprise_Formation WHERE NoEntreprise = " + noEnt +
                    " and NoFormation = " + noFormation;

            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);
            reader = oleDbCmd.ExecuteReader();

            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }


        public void setUpdateFormation(string NomFormation, string NbHeure, string Langue, string Description, string Prix, string NomFormateur)
        {
            int noFormateur = getNoFormateur(NomFormateur);

            // Sélection des Formateur actif
            query = "UPDATE Formation SET ";
            query += "NbHeure = @NbHeure,";
            query += "Langue = @Langue,";
            query += "Description = @Description,";
            query += "Prix = @Prix, ";
            query += "NoFormateur = @NoFormateur ";
            query += "WHERE NomFormation like @NomFormation";

            // Création de la connection OleDB et l'execution du DataReader
            oleDbCmd = new OleDbCommand(query, oleDbCn);

            oleDbCmd.Parameters.AddWithValue("NbHeure", NbHeure);
            oleDbCmd.Parameters.AddWithValue("Langue", Langue);
            oleDbCmd.Parameters.AddWithValue("Description", Description);
            oleDbCmd.Parameters.AddWithValue("Prix", Prix);
            oleDbCmd.Parameters.AddWithValue("NoFormateur", noFormateur);
            oleDbCmd.Parameters.AddWithValue("NomFormation", NomFormation);

            reader = oleDbCmd.ExecuteReader();

            // Fermeture du reader et de la connection OleDB
            reader.Close();
            oleDbCmd.Cancel();
        }

    }
}